package testing;

import processing.core.*;
import processing.xml.*;

import java.applet.*;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.event.MouseEvent;
import java.awt.event.KeyEvent;
import java.awt.event.FocusEvent;
import java.awt.Image;
import java.io.*;
import java.net.*;
import java.text.*;
import java.util.*;
import java.util.zip.*;
import java.util.regex.*;

public class testline extends PApplet {

	// Requires Scrollbar Class
	Scrollbar bar;
	
	Scrollbar bar1;
	PImage img;

	public void setup() {
		size(100, 100);
		noStroke();
		// Inputs: x, y, width, height, minVal, maxVal
		bar = new Scrollbar(10, 45, 80, 10, -200.0f, 0.0f);
		bar1 = new Scrollbar(10, 65, 80, 10, -200.0f, 0.0f);
	
	//	img = loadImage("landscape.jpg");
	}

	public void draw() {
		background(204);
		int x = PApplet.parseInt(bar.getPos());
	//	image(img, x, 0);
		bar.update(mouseX, mouseY);
		bar.display();
	}

	public void mousePressed() {
		bar.press(mouseX, mouseY);
	}

	public void mouseReleased() {
		bar.release();
	}

	class Scrollbar {
		int x, y; // The x- and y-coordinates
		float sw, sh; // Width and height of scrollbar
		float pos; // Position of thumb
		float posMin, posMax; // Max and min values of thumb
		boolean rollover; // True when the mouse is over
		boolean locked; // True when its the active scrollbar
		float minVal, maxVal; // Min and max values for the thumb

		Scrollbar(int xp, int yp, int w, int h, float miv, float mav) {
			x = xp;
			y = yp;
			sw = w;
			sh = h;
			minVal = miv;
			maxVal = mav;
			pos = x + sw / 2 - sh / 2;
			posMin = x;
			posMax = x + sw - sh;
		}

		// Updates the over boolean and the position of the thumb
		public void update(int mx, int my) {
			if (over(mx, my) == true) {
				rollover = true;
			} else {
				rollover = false;
			}
			if (locked == true) {
				pos = constrain(mx - sh / 2, posMin, posMax);
			}
		}

		// Locks the thumb so the mouse can move off and still update
		public void press(int mx, int my) {
			if (rollover == true) {
				locked = true;
			} else {
				locked = false;
			}
		}

		// Resets the scrollbar to neutral
		public void release() {
			locked = false;
		}

		// Returns true if the cursor is over the scrollbar
		public boolean over(int mx, int my) {
			if ((mx > x) && (mx < x + sw) && (my > y) && (my < y + sh)) {
				return true;
			} else {
				return false;
			}
		}

		// Draws the scrollbar to the screen
		public void display() {
			fill(255);
			rect(x, y, sw, sh);
			if ((rollover == true) || (locked == true)) {
				fill(0);
			} else {
				fill(102);
			}
			rect(pos, y, sh, sh);
		}

		// Returns the current value of the thumb
		public float getPos() {
			float scalar = sw / (sw - sh);
			float ratio = (pos - x) * scalar;
			float offset = minVal + (ratio / sw * (maxVal - minVal));
			return offset;
		}
	}

}
